Heap Memory এবং Garbage Collection গাইড ও নোট

Java Technologies - জাভা ভার্চুয়াল মেশিন (Java Virtual Machine) - JVM এর Memory Management
375

Java Virtual Machine (JVM) হল একটি সফটওয়্যার ইঞ্জিন যা Java প্রোগ্রামগুলি চালানোর জন্য প্রয়োজনীয় পরিবেশ সরবরাহ করে। JVM এর মেমরি ম্যানেজমেন্ট খুবই গুরুত্বপূর্ণ, কারণ এটি রানটাইমে ডেটা স্টোর, অ্যাক্সেস এবং মেমরি পরিচালনা করে। JVM এর Heap Memory এবং Garbage Collection দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা, যা মেমরি ব্যবস্থাপনা এবং অব্যবহৃত মেমরি পুনরুদ্ধার করার জন্য ব্যবহৃত হয়।

Heap Memory এবং Garbage Collection:

Heap Memory:

  • Heap Memory হল JVM এর একটি মেমরি এলাকা যেখানে অবজেক্ট এবং অ্যারেই গুলি ডাইনামিক্যালি তৈরি হয়। এটি একটি খুব বড় মেমরি অঞ্চল, যা JVM দ্বারা সমস্ত ক্লাসের ইনস্ট্যান্স এবং অ্যারে ধারণ করতে ব্যবহৃত হয়।
  • যখন আপনি new কীওয়ার্ড ব্যবহার করে কোনো অবজেক্ট তৈরি করেন, তখন সেটি Heap Memory তে রাখা হয়।
  • Heap Memory দুইটি প্রধান ভাগে বিভক্ত:
    • Young Generation: নতুন অবজেক্টগুলির জন্য ব্যবহৃত হয়। এটি আরও ছোট এবং দ্রুত সংগ্রহ করা হয় (Garbage Collection এর জন্য)।
    • Old Generation: দীর্ঘস্থায়ী অবজেক্টগুলি এখানে চলে আসে। এই অবজেক্টগুলি কম Garbage Collection প্রক্রিয়ার মাধ্যমে প্রক্রিয়া হয়, তবে এগুলি বড় এবং স্থায়ী হয়।

Heap Memory থেকে অবজেক্টের মেমরি রিলিজ করার জন্য Garbage Collection প্রক্রিয়া ব্যবহার করা হয়।

Heap Memory এর প্রধান উপাদানসমূহ:

  1. Young Generation:
    • Eden Space: নতুন অবজেক্টগুলি এখানে তৈরি হয়।
    • Survivor Space (S0 & S1): অবজেক্টগুলি যখন পর্যাপ্ত সময় ধরে টিকে থাকে তখন সেগুলি এখানে স্থানান্তরিত হয়।
  2. Old Generation:
    • এটি পুরানো এবং দীর্ঘস্থায়ী অবজেক্টের জন্য ব্যবহৃত হয়।
  3. Permanent Generation (JDK 8 পূর্ববর্তী সংস্করণে):
    • এটি ক্লাসের মেটাডেটা ধারণ করে, যেমন ক্লাসের সংজ্ঞা, মেথড, ফিল্ড ইত্যাদি। JDK 8 থেকে, এটি Metaspace এ পরিবর্তিত হয়েছে।

Garbage Collection (GC):

Garbage Collection হল একটি প্রক্রিয়া যা JVM এর মাধ্যমে অপ্রয়োজনীয় অবজেক্ট এবং মেমরি ম্যানেজমেন্ট পরিচালনা করে। এটি Heap Memory থেকে অবজেক্টগুলির রেফারেন্স চেক করে এবং যেগুলি আর ব্যবহৃত হচ্ছে না সেগুলি মুছে দেয়।

Garbage Collection এর কাজ:

  • GC কাজ করে যখন JVM খালি মেমরি খুঁজে পায় বা যখন Heap Memory পূর্ণ হয়।
  • JVM কিছু অপ্রয়োজনীয় অবজেক্টকে শনাক্ত করে, যেগুলি আর কোনো রেফারেন্স দ্বারা অ্যাক্সেস করা যাচ্ছে না।
  • GC সেই অবজেক্টগুলি মুছে দেয়, যা মেমরি পুনরুদ্ধার করতে সহায়ক।

Garbage Collection এর ধাপসমূহ:

  1. Marking Phase: এটি প্রথম ধাপ যেখানে সমস্ত অ্যাক্টিভ অবজেক্টগুলো চিহ্নিত করা হয় (যেগুলি এখনও ব্যবহৃত হচ্ছে)।
  2. Sweeping Phase: দ্বিতীয় ধাপে, চিহ্নিত করা হয়নি এমন অবজেক্টগুলো মুছে ফেলা হয়।
  3. Compacting Phase: এই ধাপে, অবশিষ্ট অবজেক্টগুলিকে একত্রিত করা হয় যাতে Heap Memory এর স্পেস অপটিমাইজ করা যায়।

Garbage Collector এর ধরন:

  1. Serial Garbage Collector: একক থ্রেড ব্যবহার করে মেমরি পরিচালনা করে, ছোট অ্যাপ্লিকেশনের জন্য উপযুক্ত।
  2. Parallel Garbage Collector: একাধিক থ্রেড ব্যবহার করে কাজ সম্পাদন করে, যা বড় অ্যাপ্লিকেশনের জন্য উপযুক্ত।
  3. CMS (Concurrent Mark-Sweep) Collector: এটি দ্রুত GC প্রদান করতে সাহায্য করে এবং কম সময়ের মধ্যে মেমরি সংগ্রহ করে।
  4. G1 Garbage Collector: এটি বড় অ্যাপ্লিকেশনগুলির জন্য প্রযোজ্য, যেখানে আগের GC পদ্ধতিগুলোর তুলনায় আরও উন্নত পারফর্ম্যান্স এবং সুনির্দিষ্ট GC পছন্দ করা যায়।

Heap Memory এবং Garbage Collection এর মধ্যে সম্পর্ক:

  • Heap Memory হল সেই জায়গা যেখানে সকল অবজেক্ট তৈরি হয় এবং Garbage Collection এই Memory এলাকা থেকে অব্যবহৃত অবজেক্টগুলি মুছে দেয়।
  • Garbage Collection এর মাধ্যমে, JVM Heap Memory পরিচালনা করে এবং মেমরি অপ্টিমাইজ করে। এতে automatic memory management হয়, যা ম্যানুয়ালি করতে হয় না।

Heap Memory এবং Garbage Collection উদাহরণ:

public class GarbageCollectionExample {
    public static void main(String[] args) {
        // Create an object
        MyClass obj1 = new MyClass();
        
        // Object 1 is not referenced anymore
        obj1 = null; // Now eligible for Garbage Collection

        // Create another object
        MyClass obj2 = new MyClass();
        
        // Let GC do the cleanup for unused objects
        System.gc(); // Request garbage collection (not guaranteed)
    }
}

class MyClass {
    // Class definition
    protected void finalize() {
        System.out.println("Garbage collected");
    }
}

Garbage Collection-এর জন্য কিছু উপকারী টিপস:

  1. System.gc(): এটি Garbage Collector কে ম্যানুয়ালি ট্রিগার করে, তবে JVM এটি বাধ্যতামূলকভাবে চালায় না। এটি শুধুমাত্র hint প্রদান করে।
  2. Finalize() method: এটি একটি বিশেষ মেথড যা যখন অবজেক্ট GC এর মাধ্যমে মুছে ফেলা হয় তখন কল করা হয়। তবে, এটি খুবই ব্যয়বহুল এবং সঠিকভাবে ব্যবহার করা উচিত নয়।
  3. Memory Leaks: সঠিকভাবে অবজেক্টের রেফারেন্স মুছে না দিলে মেমরি লিক হতে পারে। যদি অবজেক্টের সাথে সম্পর্কিত কোনো রেফারেন্স রাখা না হয়, তবে GC সেগুলিকে মুছে দিতে পারে।

সারাংশ:

  • Heap Memory JVM এর মেমরি এলাকা যেখানে সমস্ত অবজেক্ট তৈরি হয়, এবং এটি সাধারণত দুটি ভাগে বিভক্ত: Young Generation এবং Old Generation
  • Garbage Collection একটি প্রক্রিয়া যা অপ্রয়োজনীয় বা অব্যবহৃত অবজেক্টগুলোকে মুছে ফেলে এবং মেমরি পুনরুদ্ধার করে।
  • JVM এর মাধ্যমে Garbage Collection অটোমেটিক মেমরি ম্যানেজমেন্ট সরবরাহ করে, যা মেমরি ব্যবহারকে দক্ষ এবং সুষ্ঠু রাখে।
Content added By
Promotion

Are you sure to start over?

Loading...